home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
The Programmer Disk
/
The Programmer Disk (Microforum).iso
/
xpro
/
c3
/
pro24
/
mm.c
< prev
next >
Wrap
C/C++ Source or Header
|
1986-08-06
|
4KB
|
137 lines
/* mm.c -- midi monitor */
/*****************************************************************************
* Change Log
* Date | Change
*-----------+-----------------------------------------------------------------
* 7-Apr-86 | Created changelog
*****************************************************************************/
#include "cext.h"
#include "stdio.h"
#include "midicode.h"
#include "mpu.h"
#include "cmdline.h"
int bender; /* record pitch bend etc.? */
/****************************************************************************
* Data for command line parsing
****************************************************************************/
#define nswitches 8
private char *switches[nswitches] =
{ "-help", "-miditrace", "-m", "-trace", "-t", "-block", "-d", "-debug"};
#define noptions 1
private char *options[noptions] = { "-tune" };
/*****************************************************************************
* Routines local to this module
*****************************************************************************/
private void output();
private void put_pitch();
private void showhelp();
/****************************************************************************
* main
* Effect: prompts for parameters, starts monitor
****************************************************************************/
void main(argc, argv)
int argc;
char *argv[];
{
int done = false;
byte data[4]; /* midi input data buffer */
cl_init(switches, nswitches, options, noptions, argv, argc);
if (cl_switch("-help")) showhelp();
bender = askbool("pitch bend etc. on", false);
musicinit();
while (getkey(false) != -1) ;
midi_cont(bender);
printf("Midi Monitor ready. Type Q to stop.\n");
while (!done) {
char c;
if (kbhit()) {
c = getch();
if (tolower(c) == 'q') done = true;
else printf("type q to quit\n");
}
if (getbuf(false, data)) {
output(data);
}
}
musicterm();
}
/****************************************************************************
* output
* Inputs:
* byte data[]: midi data buffer holding one command
* Effect: format and print midi data
****************************************************************************/
void output(data)
byte data[];
{
int command; /* the current command */
int chan; /* the midi channel of the current event */
command = data[0] & MIDI_CODE_MASK;
chan = data[0] & MIDI_CHN_MASK;
if (command == MIDI_ON_NOTE && data[2] != 0) {
printf("Note On, Chan %2d, Key %2d (", chan, data[1]);
put_pitch(data[1] - 12);
printf("), Vel %d\n", data[2]);
} else if (command == MIDI_ON_NOTE /* && data[2] == 0 */) {
printf("Note Off, Chan %2d, Key %2d (", chan, data[1]);
put_pitch(data[1] - 12);
printf("), Vel %d\n", data[2]);
} else if (command == MIDI_CH_PROGRAM) {
printf("Prog Chg, Chan %2d, Prog %2d\n", chan, data[1]);
} else if (command == MIDI_CTRL) {
printf("Ctrl Chg, Chan %2d, Ctrl %2d, Val %2d\n",
chan, data[1], data[2]);
} else if (command == MIDI_TOUCH) {
printf("A. Touch, Chan %2d, Val %2d\n", chan, data[1]);
} else if (command == MIDI_BEND) {
printf("P. Bend, Chan %2d, Val %2d\n", chan,
(data[1] + (data[2]<<7)));
}
}
/****************************************************************************
* put_pitch
* Inputs:
* int p: pitch number
* Effect: write out the pitch name for a given number
****************************************************************************/
private void put_pitch(p)
int p;
{
static char *ptos[] = {"c", "cs", "d", "ef", "e", "f", "fs", "g",
"gs", "a", "bf", "b"};
printf("%s%d", ptos[p % 12], p / 12);
}
/****************************************************************************
* showhelp
* Effect: print help text
****************************************************************************/
private void showhelp()
{
fprintf(stderr,"mm is a midi monitor program, switches are:");
fprintf(stderr," -block disable MIDI thru\n");
fprintf(stderr," -help this message\n");
fprintf(stderr," -miditrace (-m) turn on MIDI command trace\n");
fprintf(stderr," -trace (-t) trace music\n");
fprintf(stderr," -debug (-d) debug flag for cintr.c\n");
}